<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
           "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>Coverage Report</title>
<link title="Style" type="text/css" rel="stylesheet" href="css/main.css"/>
<script type="text/javascript" src="js/popup.js"></script>
</head>
<body>
<h5>Coverage Report - org.sakaiproject.genericdao.hibernate.HibernateGeneralGenericDao</h5>
<div class="separator">&nbsp;</div>
<table class="report">
<thead><tr>  <td class="heading">Classes in this File</td>  <td class="heading" width="20%"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Line Coverage</a></td>  <td class="heading" width="20%"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Branch Coverage</a></td>  <td class="heading" width="10%"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Complexity</a></td></tr></thead>
  <tr><td class="text"><a href="org.sakaiproject.genericdao.hibernate.HibernateGeneralGenericDao.html">HibernateGeneralGenericDao</a></td><td class="value"><table cellpadding="0" cellspacing="0" align="right"><tr><td>83%&nbsp;</td><td><table class="percentGraph" cellpadding="0" cellspacing="0" width="100"><tr><td class="covered" width="83"></td><td class="uncovered" width="17"></td></tr></table></td></tr></table></td><td class="value"><table cellpadding="0" cellspacing="0" align="right"><tr><td>95%&nbsp;</td><td><table class="percentGraph" cellpadding="0" cellspacing="0" width="100"><tr><td class="covered" width="95"></td><td class="uncovered" width="4"></td></tr></table></td></tr></table></td><td class="value"><span class="hidden">0.0;</span>0</td></tr>
</table>
<div class="separator">&nbsp;</div>
<table cellspacing="0" cellpadding="0" class="src">
<tr>
  <td class="numLine">&nbsp;1</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">/******************************************************************************</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;2</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment"> * HibernateGeneralGenericDao.java - created by aaronz@vt.edu</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;3</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment"> * </span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;4</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment"> * Copyright (c) 2006, 2007, 2008</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;5</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment"> * Licensed under the Apache License, Version 2</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;6</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment"> * </span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;7</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment"> * A copy of the Apache License, Version 2 has been included in this </span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;8</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment"> * distribution and is available at: http://www.apache.org/licenses/LICENSE-2.0.txt</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;9</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment"> * </span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;10</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment"> * Contributors:</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;11</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment"> * Aaron Zeckoski (aaronz@vt.edu) - primary</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;12</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment"> * </span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;13</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment"> *****************************************************************************/</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;14</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;15</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="keyword">package</span> org.sakaiproject.genericdao.hibernate;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;16</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;17</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> java.io.Serializable;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;18</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> java.util.ArrayList;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;19</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> java.util.HashSet;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;20</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> java.util.Iterator;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;21</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> java.util.List;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;22</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> java.util.Set;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;23</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;24</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> org.hibernate.criterion.DetachedCriteria;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;25</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> org.sakaiproject.genericdao.api.GeneralGenericDao;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;26</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;27</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">/**</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;28</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment"> * A Hibernate (http://hibernate.org/) based implementation of GeneralGenericDao</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;29</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment"> * which can be extended to add more specialized DAO methods.</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;30</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment"> * &lt;p&gt;</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;31</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment"> * See the overview for installation/usage tips.</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;32</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment"> * </span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;33</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment"> * @author Aaron Zeckoski (aaronz@vt.edu)</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;34</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;35</td>
  <td class="nbHitsCovered">&nbsp;2</td>
  <td class="src"><pre class="src">&nbsp;<span class="keyword">public</span> <span class="keyword">class</span> HibernateGeneralGenericDao <span class="keyword">extends</span> HibernateBasicGenericDao <span class="keyword">implements</span> GeneralGenericDao {</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;36</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;37</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">//   public &lt;T&gt; void deleteSet(Set&lt;T&gt; entities) {</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;38</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">//      checkEntitySet(entities);</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;39</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">//      // TODO - reattach non-persistent objects</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;40</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">//      getHibernateTemplate().deleteAll(entities);</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;41</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">//   }</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;42</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;43</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;   @SuppressWarnings(<span class="string">"unchecked"</span>)</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;44</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;   <span class="keyword">public</span> &lt;T&gt; List&lt;T&gt; findAll(Class&lt;T&gt; entityClass, <span class="keyword">int</span> firstResult, <span class="keyword">int</span> maxResults) {</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;45</td>
  <td class="nbHitsCovered">&nbsp;30</td>
  <td class="src"><pre class="src">&nbsp;      DetachedCriteria criteria = DetachedCriteria.forClass(checkClass(entityClass));</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;46</td>
  <td class="nbHitsCovered">&nbsp;30</td>
  <td class="src"><pre class="src">&nbsp;      List&lt;T&gt; items = getHibernateTemplate().findByCriteria(criteria, firstResult, maxResults);</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;47</td>
  <td class="nbHitsCovered">&nbsp;30</td>
  <td class="src"><pre class="src">&nbsp;      <span class="keyword">return</span> items;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;48</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;   }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;49</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;50</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;51</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;   <span class="comment">// OVERRIDES</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;52</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;53</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;   <span class="comment">/**</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;54</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">    * MUST override this method</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;55</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">    */</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;56</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;   <span class="keyword">protected</span> &lt;T&gt; <span class="keyword">int</span> baseCountAll(Class&lt;T&gt; type) {</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;57</td>
  <td class="nbHitsCovered">&nbsp;4</td>
  <td class="src"><pre class="src">&nbsp;      <span class="keyword">return</span> count(START_QUERY + <span class="string">" "</span> + checkClass(type).getName());</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;58</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;   }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;59</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;60</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;   <span class="comment">/**</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;61</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">    * MUST override this method</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;62</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">    */</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;63</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;   <span class="keyword">protected</span> &lt;T&gt; <span class="keyword">int</span> baseSaveSet(Class&lt;?&gt; type, Set&lt;T&gt; entities) {</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;64</td>
  <td class="nbHitsCovered">&nbsp;8</td>
  <td class="src"><pre class="src">&nbsp;      getHibernateTemplate().saveOrUpdateAll(entities);</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;65</td>
  <td class="nbHitsCovered">&nbsp;8</td>
  <td class="src"><pre class="src">&nbsp;      <span class="keyword">return</span> entities.size();</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;66</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;   }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;67</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;68</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;   <span class="comment">/**</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;69</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">    * MUST override this method</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;70</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">    */</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;71</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;   <span class="keyword">protected</span> &lt;T&gt; <span class="keyword">int</span> baseDeleteSet(Class&lt;T&gt; type, Serializable[] ids) {</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;72</td>
  <td class="nbHitsCovered">&nbsp;9</td>
  <td class="src"><pre class="src">&nbsp;      Set&lt;Object&gt; entities = <span class="keyword">new</span> HashSet&lt;Object&gt;();</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;73</td>
  <td class="nbHitsCovered">&nbsp;25</td>
  <td class="src"><pre class="src">&nbsp;      <span class="keyword">for</span> (<span class="keyword">int</span> i = 0; i &lt; ids.length; i++) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;74</td>
  <td class="nbHitsCovered">&nbsp;16</td>
  <td class="src"><pre class="src">&nbsp;         Object object = baseFindById(type, ids[i]);</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;75</td>
  <td class="nbHitsCovered">&nbsp;16</td>
  <td class="src"><pre class="src">&nbsp;         <span class="keyword">if</span> (object != <span class="keyword">null</span>) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;76</td>
  <td class="nbHitsCovered">&nbsp;16</td>
  <td class="src"><pre class="src">&nbsp;            entities.add(object);</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;77</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;         }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;78</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;      }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;79</td>
  <td class="nbHitsCovered">&nbsp;9</td>
  <td class="src"><pre class="src">&nbsp;      getHibernateTemplate().deleteAll(entities);</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;80</td>
  <td class="nbHitsCovered">&nbsp;9</td>
  <td class="src"><pre class="src">&nbsp;      <span class="keyword">return</span> entities.size();</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;81</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">/** This will not flush the item from the session so it is hopeless -AZ</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;82</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">      StringBuilder sb = new StringBuilder();</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;83</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">      for (int i = 0; i &lt; ids.length; i++) {</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;84</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">         Object id = ids[i];</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;85</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">         if (id != null) {</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;86</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">            if (i &gt; 0) { sb.append(','); }</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;87</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">            sb.append('?');</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;88</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">         }</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;89</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">      }</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;90</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">      String hql = "delete from "+type.getName()+" entity where entity.id in (" + sb + ")";</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;91</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">      int deletes = getHibernateTemplate().bulkUpdate(hql, ids);</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;92</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">      return deletes;</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;93</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">***/</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;94</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;   }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;95</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;96</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;   <span class="comment">// COMMON CODE</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;97</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;98</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;   <span class="keyword">public</span> &lt;T&gt; List&lt;T&gt; findAll(Class&lt;T&gt; type) {</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;99</td>
  <td class="nbHitsCovered">&nbsp;27</td>
  <td class="src"><pre class="src">&nbsp;      <span class="keyword">return</span> findAll(type, 0, 0);</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;100</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;   }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;101</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;102</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;   <span class="keyword">public</span> &lt;T&gt; <span class="keyword">int</span> countAll(Class&lt;T&gt; type) {</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;103</td>
  <td class="nbHitsCovered">&nbsp;4</td>
  <td class="src"><pre class="src">&nbsp;      checkClass(type);</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;104</td>
  <td class="nbHitsCovered">&nbsp;4</td>
  <td class="src"><pre class="src">&nbsp;      <span class="keyword">int</span> count = 0;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;105</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;106</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;      <span class="comment">// check the cache first</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;107</td>
  <td class="nbHitsCovered">&nbsp;4</td>
  <td class="src"><pre class="src">&nbsp;      <span class="keyword">boolean</span> usedCache = <span class="keyword">false</span>;</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;108</td>
  <td class="nbHitsCovered">&nbsp;4</td>
  <td class="src"><pre class="src">&nbsp;      String searchCacheName = getSearchCacheName(type);</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;109</td>
  <td class="nbHitsCovered">&nbsp;4</td>
  <td class="src"><pre class="src">&nbsp;      String cacheKey = <span class="string">"countAll::"</span> + type.getName();</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;110</td>
  <td class="nbHitsCovered">&nbsp;4</td>
  <td class="src"><pre class="src">&nbsp;      <span class="keyword">if</span> (getCacheProvider().exists(searchCacheName, cacheKey)) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;111</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;         Integer iCount = (Integer) getCacheProvider().get(searchCacheName, cacheKey);</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;112</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;         <span class="keyword">if</span> (iCount != <span class="keyword">null</span>) {</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;113</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;            count = iCount.intValue();</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;114</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;            usedCache = <span class="keyword">true</span>;</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;115</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;         }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;116</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;      }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;117</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;118</td>
  <td class="nbHitsCovered">&nbsp;4</td>
  <td class="src"><pre class="src">&nbsp;      <span class="keyword">if</span> (! usedCache) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;119</td>
  <td class="nbHitsCovered">&nbsp;4</td>
  <td class="src"><pre class="src">&nbsp;         count = baseCountAll(type);</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;120</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;121</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;         <span class="comment">// cache the id results for the search</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;122</td>
  <td class="nbHitsCovered">&nbsp;4</td>
  <td class="src"><pre class="src">&nbsp;         getCacheProvider().put(searchCacheName, cacheKey, Integer.valueOf(count));</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;123</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;      }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;124</td>
  <td class="nbHitsCovered">&nbsp;4</td>
  <td class="src"><pre class="src">&nbsp;      <span class="keyword">return</span> count;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;125</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;   }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;126</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;127</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;   <span class="keyword">public</span> &lt;T&gt; <span class="keyword">void</span> deleteSet(Class&lt;T&gt; type, Serializable[] ids) {</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;128</td>
  <td class="nbHitsCovered">&nbsp;11</td>
  <td class="src"><pre class="src">&nbsp;      checkClass(type);</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;129</td>
  <td class="nbHitsCovered">&nbsp;11</td>
  <td class="src"><pre class="src">&nbsp;      <span class="keyword">if</span> (ids.length &gt; 0) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;130</td>
  <td class="nbHitsCovered">&nbsp;9</td>
  <td class="src"><pre class="src">&nbsp;         String operation = <span class="string">"deleteSet"</span>;</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;131</td>
  <td class="nbHitsCovered">&nbsp;9</td>
  <td class="src"><pre class="src">&nbsp;         beforeWrite(operation, type, ids, <span class="keyword">null</span>);</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;132</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;   </pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;133</td>
  <td class="nbHitsCovered">&nbsp;9</td>
  <td class="src"><pre class="src">&nbsp;         <span class="keyword">int</span> changes = baseDeleteSet(type, ids);</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;134</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;   </pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;135</td>
  <td class="nbHitsCovered">&nbsp;9</td>
  <td class="src"><pre class="src">&nbsp;         afterWrite(operation, type, ids, <span class="keyword">null</span>, changes);</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;136</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;   </pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;137</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;         <span class="comment">// clear all removed items from the cache</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;138</td>
  <td class="nbHitsCovered">&nbsp;9</td>
  <td class="src"><pre class="src">&nbsp;         String cacheName = getCacheName(type);</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;139</td>
  <td class="nbHitsCovered">&nbsp;25</td>
  <td class="src"><pre class="src">&nbsp;         <span class="keyword">for</span> (<span class="keyword">int</span> i = 0; i &lt; ids.length; i++) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;140</td>
  <td class="nbHitsCovered">&nbsp;16</td>
  <td class="src"><pre class="src">&nbsp;            <span class="keyword">if</span> (ids[i] != <span class="keyword">null</span>) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;141</td>
  <td class="nbHitsCovered">&nbsp;16</td>
  <td class="src"><pre class="src">&nbsp;               String key = ids[i].toString();</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;142</td>
  <td class="nbHitsCovered">&nbsp;16</td>
  <td class="src"><pre class="src">&nbsp;               getCacheProvider().remove(cacheName, key);</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;143</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;            }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;144</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;         }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;145</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;         <span class="comment">// clear the search caches</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;146</td>
  <td class="nbHitsCovered">&nbsp;9</td>
  <td class="src"><pre class="src">&nbsp;         getCacheProvider().clear(getSearchCacheName(type));</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;147</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;      }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;148</td>
  <td class="nbHitsCovered">&nbsp;11</td>
  <td class="src"><pre class="src">&nbsp;   }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;149</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;150</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;   <span class="keyword">public</span> &lt;T&gt; <span class="keyword">void</span> saveSet(Set&lt;T&gt; entities) {</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;151</td>
  <td class="nbHitsCovered">&nbsp;11</td>
  <td class="src"><pre class="src">&nbsp;      <span class="keyword">if</span> (entities == <span class="keyword">null</span> || entities.isEmpty()) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;152</td>
  <td class="nbHitsCovered">&nbsp;1</td>
  <td class="src"><pre class="src">&nbsp;         System.out.println(<span class="string">"WARN: Empty list of entities for saveSet, nothing to do..."</span>);</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;153</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;      } <span class="keyword">else</span> {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;154</td>
  <td class="nbHitsCovered">&nbsp;10</td>
  <td class="src"><pre class="src">&nbsp;         Class&lt;?&gt; type = checkEntitySet(entities);</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;155</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;   </pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;156</td>
  <td class="nbHitsCovered">&nbsp;8</td>
  <td class="src"><pre class="src">&nbsp;         String operation = <span class="string">"saveSet"</span>;</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;157</td>
  <td class="nbHitsCovered">&nbsp;8</td>
  <td class="src"><pre class="src">&nbsp;         beforeWrite(operation, type, <span class="keyword">null</span>, entities.toArray());</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;158</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;   </pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;159</td>
  <td class="nbHitsCovered">&nbsp;8</td>
  <td class="src"><pre class="src">&nbsp;         <span class="keyword">int</span> changes = baseSaveSet(type, entities);</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;160</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;   </pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;161</td>
  <td class="nbHitsCovered">&nbsp;8</td>
  <td class="src"><pre class="src">&nbsp;         afterWrite(operation, type, <span class="keyword">null</span>, entities.toArray(), changes);</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;162</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;   </pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;163</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;         <span class="comment">// clear all saved items from the cache</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;164</td>
  <td class="nbHitsCovered">&nbsp;8</td>
  <td class="src"><pre class="src">&nbsp;         String cacheName = getCacheName(type);</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;165</td>
  <td class="nbHitsCovered">&nbsp;8</td>
  <td class="src"><pre class="src">&nbsp;         <span class="keyword">for</span> (T t : entities) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;166</td>
  <td class="nbHitsCovered">&nbsp;14</td>
  <td class="src"><pre class="src">&nbsp;            Object id = baseGetIdValue(t);</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;167</td>
  <td class="nbHitsCovered">&nbsp;14</td>
  <td class="src"><pre class="src">&nbsp;            <span class="keyword">if</span> (id != <span class="keyword">null</span>) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;168</td>
  <td class="nbHitsCovered">&nbsp;14</td>
  <td class="src"><pre class="src">&nbsp;               String key = id.toString();</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;169</td>
  <td class="nbHitsCovered">&nbsp;14</td>
  <td class="src"><pre class="src">&nbsp;               getCacheProvider().remove(cacheName, key);</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;170</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;            }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;171</td>
  <td class="nbHitsCovered">&nbsp;14</td>
  <td class="src"><pre class="src">&nbsp;         }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;172</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;         <span class="comment">// clear the search caches</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;173</td>
  <td class="nbHitsCovered">&nbsp;8</td>
  <td class="src"><pre class="src">&nbsp;         getCacheProvider().clear(getSearchCacheName(type));</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;174</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;      }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;175</td>
  <td class="nbHitsCovered">&nbsp;9</td>
  <td class="src"><pre class="src">&nbsp;   }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;176</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;177</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;   <span class="keyword">public</span> &lt;T&gt; <span class="keyword">void</span> deleteSet(Set&lt;T&gt; entities) {</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;178</td>
  <td class="nbHitsCovered">&nbsp;9</td>
  <td class="src"><pre class="src">&nbsp;      <span class="keyword">if</span> (entities.size() &gt; 0) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;179</td>
  <td class="nbHitsCovered">&nbsp;8</td>
  <td class="src"><pre class="src">&nbsp;         Class&lt;?&gt; type = checkEntitySet(entities);</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;180</td>
  <td class="nbHitsCovered">&nbsp;6</td>
  <td class="src"><pre class="src">&nbsp;         List&lt;Object&gt; ids = <span class="keyword">new</span> ArrayList&lt;Object&gt;();</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;181</td>
  <td class="nbHitsCovered">&nbsp;6</td>
  <td class="src"><pre class="src">&nbsp;         <span class="keyword">for</span> (T t : entities) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;182</td>
  <td class="nbHitsCovered">&nbsp;10</td>
  <td class="src"><pre class="src">&nbsp;            Object id = baseGetIdValue(t);</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;183</td>
  <td class="nbHitsCovered">&nbsp;10</td>
  <td class="src"><pre class="src">&nbsp;            <span class="keyword">if</span> (id != <span class="keyword">null</span>) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;184</td>
  <td class="nbHitsCovered">&nbsp;10</td>
  <td class="src"><pre class="src">&nbsp;               ids.add(id);</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;185</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;            }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;186</td>
  <td class="nbHitsCovered">&nbsp;10</td>
  <td class="src"><pre class="src">&nbsp;         }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;187</td>
  <td class="nbHitsCovered">&nbsp;6</td>
  <td class="src"><pre class="src">&nbsp;         deleteSet(type, ids.toArray(<span class="keyword">new</span> Serializable[ids.size()]));</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;188</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;      }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;189</td>
  <td class="nbHitsCovered">&nbsp;7</td>
  <td class="src"><pre class="src">&nbsp;   }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;190</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;191</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;   @SuppressWarnings(<span class="string">"unchecked"</span>)</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;192</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;   <span class="keyword">public</span> <span class="keyword">void</span> saveMixedSet(Set[] entitySets) {</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;193</td>
  <td class="nbHitsCovered">&nbsp;13</td>
  <td class="src"><pre class="src">&nbsp;      <span class="keyword">for</span> (<span class="keyword">int</span> i=0; i&lt;entitySets.length; i++) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;194</td>
  <td class="nbHitsCovered">&nbsp;9</td>
  <td class="src"><pre class="src">&nbsp;         checkEntitySet(entitySets[i]);</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;195</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;      }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;196</td>
  <td class="nbHitsCovered">&nbsp;9</td>
  <td class="src"><pre class="src">&nbsp;      <span class="keyword">for</span> (<span class="keyword">int</span> i=0; i&lt;entitySets.length; i++) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;197</td>
  <td class="nbHitsCovered">&nbsp;5</td>
  <td class="src"><pre class="src">&nbsp;         saveSet(entitySets[i]);</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;198</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;      }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;199</td>
  <td class="nbHitsCovered">&nbsp;4</td>
  <td class="src"><pre class="src">&nbsp;   }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;200</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;201</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;   @SuppressWarnings(<span class="string">"unchecked"</span>)</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;202</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;   <span class="keyword">public</span> <span class="keyword">void</span> deleteMixedSet(Set[] entitySets) {</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;203</td>
  <td class="nbHitsCovered">&nbsp;11</td>
  <td class="src"><pre class="src">&nbsp;      <span class="keyword">for</span> (<span class="keyword">int</span> i=0; i&lt;entitySets.length; i++) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;204</td>
  <td class="nbHitsCovered">&nbsp;8</td>
  <td class="src"><pre class="src">&nbsp;         checkEntitySet(entitySets[i]);</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;205</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;      }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;206</td>
  <td class="nbHitsCovered">&nbsp;7</td>
  <td class="src"><pre class="src">&nbsp;      <span class="keyword">for</span> (<span class="keyword">int</span> i=0; i&lt;entitySets.length; i++) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;207</td>
  <td class="nbHitsCovered">&nbsp;4</td>
  <td class="src"><pre class="src">&nbsp;         deleteSet(entitySets[i]);</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;208</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;      }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;209</td>
  <td class="nbHitsCovered">&nbsp;3</td>
  <td class="src"><pre class="src">&nbsp;   }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;210</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;211</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;   <span class="comment">/**</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;212</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">    * Validates the class type and the list of entities before performing</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;213</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">    * a batch operation (throws IllegalArgumentException)</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;214</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">    * </span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;215</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">    * @param entities a Set of persistent entities, should all be of the same type</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;216</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">    */</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;217</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;   <span class="keyword">protected</span> Class&lt;?&gt; checkEntitySet(Set&lt;?&gt; entities) {</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;218</td>
  <td class="nbHitsCovered">&nbsp;35</td>
  <td class="src"><pre class="src">&nbsp;      Class&lt;?&gt; entityClass = <span class="keyword">null</span>;</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;219</td>
  <td class="nbHitsCovered">&nbsp;35</td>
  <td class="src"><pre class="src">&nbsp;      Iterator&lt;?&gt; it = entities.iterator();</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;220</td>
  <td class="nbHitsCovered">&nbsp;77</td>
  <td class="src"><pre class="src">&nbsp;      <span class="keyword">while</span>(it.hasNext()) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;221</td>
  <td class="nbHitsCovered">&nbsp;50</td>
  <td class="src"><pre class="src">&nbsp;         Object entity = it.next();</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;222</td>
  <td class="nbHitsCovered">&nbsp;50</td>
  <td class="src"><pre class="src">&nbsp;         <span class="keyword">if</span> (entityClass == <span class="keyword">null</span>) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;223</td>
  <td class="nbHitsCovered">&nbsp;35</td>
  <td class="src"><pre class="src">&nbsp;            entityClass = (Class&lt;?&gt;) findClass(entity);</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;224</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;         }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;225</td>
  <td class="nbHitsCovered">&nbsp;50</td>
  <td class="src"><pre class="src">&nbsp;         <span class="keyword">if</span> (! checkClass(entityClass).isInstance(entity)) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;226</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;            <span class="keyword">throw</span> <span class="keyword">new</span> IllegalArgumentException(<span class="string">"Entity set item "</span> +</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;227</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                  entity.toString() + <span class="string">" is not of type: "</span> + entityClass +</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;228</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                  <span class="string">", the type is: "</span> + entity.getClass() +</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;229</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;            <span class="string">" (All items must be of consistent persistent type)"</span>);</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;230</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;         }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;231</td>
  <td class="nbHitsCovered">&nbsp;42</td>
  <td class="src"><pre class="src">&nbsp;      }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;232</td>
  <td class="nbHitsCovered">&nbsp;27</td>
  <td class="src"><pre class="src">&nbsp;      <span class="keyword">return</span> entityClass;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;233</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;   }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;234</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;235</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;}</pre></td>
</tr>
</table>
<div class="footer">
Reports generated by <a href="http://cobertura.sourceforge.net/" target="_top">Cobertura</a>.
</div>
</body>
</html>
